<!doctype html>
<html>
<style type='text/css'>
    html {
        overflow-x: initial !important;
    }

    :root {
        --node-fill: #ECECFF;
        --node-border: #CCCCFF;
        --cluster-fill: #ffffde;
        --cluster-border: #aaaa33;
        --note-fill: #fff5ad;
        --note-border: #aaaa33;
        --mermaid-color: var(--text-color);
    }

    .label {
        font-family: var(--mermaid-font-family);
        color: rgb(51, 51, 51);
    }

    .label text {
        fill: rgb(51, 51, 51);
    }

    .node rect,
    .node circle,
    .node ellipse,
    .node polygon {
        fill: var(--node-fill);
        stroke: rgb(147, 112, 219);
        stroke-width: 1px;
    }

    .node .label {
        text-align: center;
    }

    .node.clickable {
        cursor: pointer;
    }

    .arrowheadPath {
        fill: var(--text-color);
    }

    .edgePath .path {
        stroke: var(--text-color);
        stroke-width: 1.5px;
    }

    .edgeLabel {
        background-color: rgb(232, 232, 232);
        text-align: center;
    }

    .cluster rect {
        fill: var(--cluster-fill);
        stroke: var(--cluster-border);
        stroke-width: 1px;
    }

    .cluster text {
        fill: var(--text-color);
    }

    div.mermaidTooltip {
        position: absolute;
        text-align: center;
        max-width: 200px;
        padding: 2px;
        font-family: var(--mermaid-font-family);
        font-size: 12px;
        background: var(--cluster-fill);
        border: 1px solid var(--cluster-border);
        border-radius: 2px;
        pointer-events: none;
        z-index: 100;
    }

    .actor {
        stroke: var(--node-border);
        fill: var(--node-fill);
    }

    text.actor {
        fill: black;
        stroke: none;
    }

    .actor-line {
        stroke: grey;
    }

    .messageLine0 {
        stroke-width: 1.5;
        stroke: var(--text-color);
    }

    .messageLine1 {
        stroke-width: 1.5;
        stroke: var(--text-color);
    }

    #arrowhead {
        fill: var(--text-color);
    }

    .sequenceNumber {
        fill: white;
    }

    #sequencenumber {
        fill: var(--text-color);
    }

    #crosshead path {
        fill: var(--text-color) !important;
        stroke: var(--text-color) !important;
    }

    .messageText {
        fill: var(--text-color);
        stroke: none;
    }

    .labelBox {
        stroke: var(--node-border);
        fill: var(--node-fill);
    }

    .labelText {
        fill: black;
        stroke: none;
    }

    .loopText {
        fill: black;
        stroke: none;
    }

    .loopLine {
        stroke-width: 2;
        stroke: var(--node-border);
    }

    .note {
        stroke: var(--cluster-border);
        fill: rgb(255, 245, 173);
    }

    .noteText {
        fill: black;
        stroke: none;
        font-family: var(--mermaid-font-family);
        font-size: 14px;
    }

    .activation0 {
        fill: rgb(244, 244, 244);
        stroke: rgb(102, 102, 102);
    }

    .activation1 {
        fill: rgb(244, 244, 244);
        stroke: rgb(102, 102, 102);
    }

    .activation2 {
        fill: rgb(244, 244, 244);
        stroke: rgb(102, 102, 102);
    }

    .mermaid-main-font {
        font-family: var(--mermaid-font-family);
    }

    .section {
        stroke: none;
        opacity: 0.2;
    }

    .section0 {
        fill: rgba(102, 102, 255, 0.49);
    }

    .section2 {
        fill: rgb(255, 244, 0);
    }

    .section1,
    .section3 {
        fill: white;
        opacity: 0.2;
    }

    .sectionTitle0 {
        fill: var(--text-color);
    }

    .sectionTitle1 {
        fill: var(--text-color);
    }

    .sectionTitle2 {
        fill: var(--text-color);
    }

    .sectionTitle3 {
        fill: var(--text-color);
    }

    .sectionTitle {
        text-anchor: start;
        font-size: 11px;
        font-family: var(--mermaid-font-family);
    }

    .grid .tick {
        stroke: lightgrey;
        opacity: 0.3;
        shape-rendering: crispedges;
    }

    .grid .tick text {
        font-family: var(--mermaid-font-family);
    }

    .grid path {
        stroke-width: 0;
    }

    .today {
        fill: none;
        stroke: red;
        stroke-width: 2px;
    }

    .task {
        stroke-width: 2;
    }

    .taskText {
        text-anchor: middle;
        font-family: var(--mermaid-font-family);
    }

    .taskText:not([font-size]) {
        font-size: 11px;
    }

    .taskTextOutsideRight {
        fill: black;
        text-anchor: start;
        font-size: 11px;
        font-family: var(--mermaid-font-family);
    }

    .taskTextOutsideLeft {
        fill: black;
        text-anchor: end;
        font-size: 11px;
    }

    .task.clickable {
        cursor: pointer;
    }

    .taskText.clickable {
        cursor: pointer;
        font-weight: bold;
        fill: rgb(0, 49, 99) !important;
    }

    .taskTextOutsideLeft.clickable {
        cursor: pointer;
        font-weight: bold;
        fill: rgb(0, 49, 99) !important;
    }

    .taskTextOutsideRight.clickable {
        cursor: pointer;
        font-weight: bold;
        fill: rgb(0, 49, 99) !important;
    }

    .taskText0,
    .taskText1,
    .taskText2,
    .taskText3 {
        fill: white;
    }

    .task0,
    .task1,
    .task2,
    .task3 {
        fill: rgb(138, 144, 221);
        stroke: rgb(83, 79, 188);
    }

    .taskTextOutside0,
    .taskTextOutside2 {
        fill: black;
    }

    .taskTextOutside1,
    .taskTextOutside3 {
        fill: black;
    }

    .active0,
    .active1,
    .active2,
    .active3 {
        fill: rgb(191, 199, 255);
        stroke: rgb(83, 79, 188);
    }

    .activeText0,
    .activeText1,
    .activeText2,
    .activeText3 {
        fill: black !important;
    }

    .done0,
    .done1,
    .done2,
    .done3 {
        stroke: grey;
        fill: lightgrey;
        stroke-width: 2;
    }

    .doneText0,
    .doneText1,
    .doneText2,
    .doneText3 {
        fill: black !important;
    }

    .crit0,
    .crit1,
    .crit2,
    .crit3 {
        stroke: rgb(255, 136, 136);
        fill: red;
        stroke-width: 2;
    }

    .activeCrit0,
    .activeCrit1,
    .activeCrit2,
    .activeCrit3 {
        stroke: rgb(255, 136, 136);
        fill: rgb(191, 199, 255);
        stroke-width: 2;
    }

    .doneCrit0,
    .doneCrit1,
    .doneCrit2,
    .doneCrit3 {
        stroke: rgb(255, 136, 136);
        fill: lightgrey;
        stroke-width: 2;
        cursor: pointer;
        shape-rendering: crispedges;
    }

    .milestone {
        transform: rotate(45deg) scale(0.8, 0.8);
    }

    .milestoneText {
        font-style: italic;
    }

    .doneCritText0,
    .doneCritText1,
    .doneCritText2,
    .doneCritText3 {
        fill: black !important;
    }

    .activeCritText0,
    .activeCritText1,
    .activeCritText2,
    .activeCritText3 {
        fill: black !important;
    }

    .titleText {
        text-anchor: middle;
        font-size: 18px;
        fill: black;
        font-family: var(--mermaid-font-family);
    }

    g.classGroup text {
        fill: rgb(147, 112, 219);
        stroke: none;
        font-family: var(--mermaid-font-family);
        font-size: 10px;
    }

    g.classGroup text .title {
        font-weight: bolder;
    }

    g.classGroup rect {
        fill: var(--node-fill);
        stroke: rgb(147, 112, 219);
    }

    g.classGroup line {
        stroke: rgb(147, 112, 219);
        stroke-width: 1;
    }

    .classLabel .box {
        stroke: none;
        stroke-width: 0;
        fill: var(--node-fill);
        opacity: 0.5;
    }

    .classLabel .label {
        fill: rgb(147, 112, 219);
        font-size: 10px;
    }

    .relation {
        stroke: rgb(147, 112, 219);
        stroke-width: 1;
        fill: none;
    }

    #compositionStart {
        fill: rgb(147, 112, 219);
        stroke: rgb(147, 112, 219);
        stroke-width: 1;
    }

    #compositionEnd {
        fill: rgb(147, 112, 219);
        stroke: rgb(147, 112, 219);
        stroke-width: 1;
    }

    #aggregationStart {
        fill: var(--node-fill);
        stroke: rgb(147, 112, 219);
        stroke-width: 1;
    }

    #aggregationEnd {
        fill: var(--node-fill);
        stroke: rgb(147, 112, 219);
        stroke-width: 1;
    }

    #dependencyStart {
        fill: rgb(147, 112, 219);
        stroke: rgb(147, 112, 219);
        stroke-width: 1;
    }

    #dependencyEnd {
        fill: rgb(147, 112, 219);
        stroke: rgb(147, 112, 219);
        stroke-width: 1;
    }

    #extensionStart {
        fill: rgb(147, 112, 219);
        stroke: rgb(147, 112, 219);
        stroke-width: 1;
    }

    #extensionEnd {
        fill: rgb(147, 112, 219);
        stroke: rgb(147, 112, 219);
        stroke-width: 1;
    }

    .commit-id,
    .commit-msg,
    .branch-label {
        fill: lightgrey;
        color: lightgrey;
        font-family: var(--mermaid-font-family);
    }

    .pieTitleText {
        text-anchor: middle;
        font-size: 25px;
        fill: black;
        font-family: var(--mermaid-font-family);
    }

    .slice {
        font-family: var(--mermaid-font-family);
    }

    g.stateGroup text {
        fill: rgb(147, 112, 219);
        stroke: none;
        font-size: 10px;
        font-family: var(--mermaid-font-family);
    }

    g.stateGroup text {
        fill: rgb(147, 112, 219);
        stroke: none;
        font-size: 10px;
    }

    g.stateGroup .state-title {
        font-weight: bolder;
        fill: black;
    }

    g.stateGroup rect {
        fill: var(--node-fill);
        stroke: rgb(147, 112, 219);
    }

    g.stateGroup line {
        stroke: rgb(147, 112, 219);
        stroke-width: 1;
    }

    .transition {
        stroke: rgb(147, 112, 219);
        stroke-width: 1;
        fill: none;
    }

    .stateGroup .composit {
        fill: white;
        border-bottom: 1px;
    }

    .state-note {
        stroke: var(--cluster-border);
        fill: rgb(255, 245, 173);
    }

    .state-note text {
        fill: black;
        stroke: none;
        font-size: 10px;
    }

    .stateLabel .box {
        stroke: none;
        stroke-width: 0;
        fill: var(--node-fill);
        opacity: 0.5;
    }

    .stateLabel text {
        fill: black;
        font-size: 10px;
        font-weight: bold;
        font-family: var(--mermaid-font-family);
    }

    .node text {
        font-size: 14px;
    }

    div.mermaidTooltip {
        position: absolute;
        text-align: center;
        max-width: 200px;
        padding: 2px;
        font-family: var(--mermaid-font-family);
        font-size: 12px;
        background: var(--cluster-fill);
        border: 1px solid var(--cluster-border);
        border-radius: 2px;
        pointer-events: none;
        z-index: 100;
    }

    #write .md-diagram-panel .md-diagram-panel-preview div {
        width: initial;
    }


    :root {
        --bg-color: #ffffff;
        --text-color: #333333;
        --select-text-bg-color: #B5D6FC;
        --select-text-font-color: auto;
        --monospace: "Lucida Console", Consolas, "Courier", monospace;
    }

    html {
        font-size: 14px;
        background-color: var(--bg-color);
        color: var(--text-color);
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
        -webkit-font-smoothing: antialiased;
    }

    body {
        margin: 0px;
        padding: 0px;
        height: auto;
        bottom: 0px;
        top: 0px;
        left: 0px;
        right: 0px;
        font-size: 1rem;
        line-height: 1.42857;
        overflow-x: hidden;
        background: inherit;
        tab-size: 4;
    }

    iframe {
        margin: auto;
    }

    a.url {
        word-break: break-all;
    }

    a:active,
    a:hover {
        outline: 0px;
    }

    .in-text-selection,
    ::selection {
        text-shadow: none;
        background: var(--select-text-bg-color);
        color: var(--select-text-font-color);
    }

    #write {
        margin: 0px auto;
        height: auto;
        width: inherit;
        word-break: normal;
        overflow-wrap: break-word;
        position: relative;
        white-space: normal;
        overflow-x: visible;
        padding-top: 40px;
    }

    #write.first-line-indent p {
        text-indent: 2em;
    }

    #write.first-line-indent li p,
    #write.first-line-indent p * {
        text-indent: 0px;
    }

    #write.first-line-indent li {
        margin-left: 2em;
    }

    .for-image #write {
        padding-left: 8px;
        padding-right: 8px;
    }

    body.typora-export {
        padding-left: 30px;
        padding-right: 30px;
    }

    .typora-export .footnote-line,
    .typora-export li,
    .typora-export p {
        white-space: pre-wrap;
    }

    @media screen and (max-width: 500px) {
        body.typora-export {
            padding-left: 0px;
            padding-right: 0px;
        }

        #write {
            padding-left: 20px;
            padding-right: 20px;
        }

        .CodeMirror-sizer {
            margin-left: 0px !important;
        }

        .CodeMirror-gutters {
            display: none !important;
        }
    }

    #write li>figure:last-child {
        margin-bottom: 0.5rem;
    }

    #write ol,
    #write ul {
        position: relative;
    }

    img {
        max-width: 100%;
        vertical-align: middle;
    }

    button,
    input,
    select,
    textarea {
        color: inherit;
        font: inherit;
    }

    input[type="checkbox"],
    input[type="radio"] {
        line-height: normal;
        padding: 0px;
    }

    *,
    ::after,
    ::before {
        box-sizing: border-box;
    }

    #write h1,
    #write h2,
    #write h3,
    #write h4,
    #write h5,
    #write h6,
    #write p,
    #write pre {
        width: inherit;
    }

    #write h1,
    #write h2,
    #write h3,
    #write h4,
    #write h5,
    #write h6,
    #write p {
        position: relative;
    }

    p {
        line-height: inherit;
    }

    h1,
    h2,
    h3,
    h4,
    h5,
    h6 {
        break-after: avoid-page;
        break-inside: avoid;
        orphans: 2;
    }

    p {
        orphans: 4;
    }

    h1 {
        font-size: 2rem;
    }

    h2 {
        font-size: 1.8rem;
    }

    h3 {
        font-size: 1.6rem;
    }

    h4 {
        font-size: 1.4rem;
    }

    h5 {
        font-size: 1.2rem;
    }

    h6 {
        font-size: 1rem;
    }

    .md-math-block,
    .md-rawblock,
    h1,
    h2,
    h3,
    h4,
    h5,
    h6,
    p {
        margin-top: 1rem;
        margin-bottom: 1rem;
    }

    .hidden {
        display: none;
    }

    .md-blockmeta {
        color: rgb(204, 204, 204);
        font-weight: 700;
        font-style: italic;
    }

    a {
        cursor: pointer;
    }

    sup.md-footnote {
        padding: 2px 4px;
        background-color: rgba(238, 238, 238, 0.7);
        color: rgb(85, 85, 85);
        border-radius: 4px;
        cursor: pointer;
    }

    sup.md-footnote a,
    sup.md-footnote a:hover {
        color: inherit;
        text-transform: inherit;
        text-decoration: inherit;
    }

    #write input[type="checkbox"] {
        cursor: pointer;
        width: inherit;
        height: inherit;
    }

    figure {
        overflow-x: auto;
        margin: 1.2em 0px;
        max-width: calc(100% + 16px);
        padding: 0px;
    }

    figure>table {
        margin: 0px !important;
    }

    tr {
        break-inside: avoid;
        break-after: auto;
    }

    thead {
        display: table-header-group;
    }

    table {
        border-collapse: collapse;
        border-spacing: 0px;
        width: 100%;
        overflow: auto;
        break-inside: auto;
        text-align: left;
    }

    table.md-table td {
        min-width: 32px;
    }

    .CodeMirror-gutters {
        border-right: 0px;
        background-color: inherit;
    }

    .CodeMirror-linenumber {
        user-select: none;
    }

    .CodeMirror {
        text-align: left;
    }

    .CodeMirror-placeholder {
        opacity: 0.3;
    }

    .CodeMirror pre {
        padding: 0px 4px;
    }

    .CodeMirror-lines {
        padding: 0px;
    }

    div.hr:focus {
        cursor: none;
    }

    #write pre {
        white-space: pre-wrap;
    }

    #write.fences-no-line-wrapping pre {
        white-space: pre;
    }

    #write pre.ty-contain-cm {
        white-space: normal;
    }

    .CodeMirror-gutters {
        margin-right: 4px;
    }

    .md-fences {
        font-size: 0.9rem;
        display: block;
        break-inside: avoid;
        text-align: left;
        overflow: visible;
        white-space: pre;
        background: inherit;
        position: relative !important;
    }

    .md-diagram-panel {
        width: 100%;
        margin-top: 10px;
        text-align: center;
        padding-top: 0px;
        padding-bottom: 8px;
        overflow-x: auto;
    }

    #write .md-fences.mock-cm {
        white-space: pre-wrap;
    }

    .md-fences.md-fences-with-lineno {
        padding-left: 0px;
    }

    #write.fences-no-line-wrapping .md-fences.mock-cm {
        white-space: pre;
        overflow-x: auto;
    }

    .md-fences.mock-cm.md-fences-with-lineno {
        padding-left: 8px;
    }

    .CodeMirror-line,
    twitterwidget {
        break-inside: avoid;
    }

    .footnotes {
        opacity: 0.8;
        font-size: 0.9rem;
        margin-top: 1em;
        margin-bottom: 1em;
    }

    .footnotes+.footnotes {
        margin-top: 0px;
    }

    .md-reset {
        margin: 0px;
        padding: 0px;
        border: 0px;
        outline: 0px;
        vertical-align: top;
        background: 0px 0px;
        text-decoration: none;
        text-shadow: none;
        float: none;
        position: static;
        width: auto;
        height: auto;
        white-space: nowrap;
        cursor: inherit;
        -webkit-tap-highlight-color: transparent;
        line-height: normal;
        font-weight: 400;
        text-align: left;
        box-sizing: content-box;
        direction: ltr;
    }

    li div {
        padding-top: 0px;
    }

    blockquote {
        margin: 1rem 0px;
    }

    li .mathjax-block,
    li p {
        margin: 0.5rem 0px;
    }

    li {
        margin: 0px;
        position: relative;
    }

    blockquote> :last-child {
        margin-bottom: 0px;
    }

    blockquote> :first-child,
    li> :first-child {
        margin-top: 0px;
    }

    .footnotes-area {
        color: rgb(136, 136, 136);
        margin-top: 0.714rem;
        padding-bottom: 0.143rem;
        white-space: normal;
    }

    #write .footnote-line {
        white-space: pre-wrap;
    }

    @media print {

        body,
        html {
            border: 1px solid transparent;
            height: 99%;
            break-after: avoid;
            break-before: avoid;
        }

        #write {
            margin-top: 0px;
            padding-top: 0px;
            border-color: transparent !important;
        }

        .typora-export * {
            -webkit-print-color-adjust: exact;
        }

        html.blink-to-pdf {
            font-size: 13px;
        }

        .typora-export #write {
            padding-left: 32px;
            padding-right: 32px;
            padding-bottom: 0px;
            break-after: avoid;
        }

        .typora-export #write::after {
            height: 0px;
        }
    }

    .footnote-line {
        margin-top: 0.714em;
        font-size: 0.7em;
    }

    a img,
    img a {
        cursor: pointer;
    }

    pre.md-meta-block {
        font-size: 0.8rem;
        min-height: 0.8rem;
        white-space: pre-wrap;
        background: rgb(204, 204, 204);
        display: block;
        overflow-x: hidden;
    }

    p>.md-image:only-child:not(.md-img-error) img,
    p>img:only-child {
        display: block;
        margin: auto;
    }

    p>.md-image:only-child {
        display: inline-block;
        width: 100%;
    }

    #write .MathJax_Display {
        margin: 0.8em 0px 0px;
    }

    .md-math-block {
        width: 100%;
    }

    .md-math-block:not(:empty)::after {
        display: none;
    }

    [contenteditable="true"]:active,
    [contenteditable="true"]:focus {
        outline: 0px;
        box-shadow: none;
    }

    .md-task-list-item {
        position: relative;
        list-style-type: none;
    }

    .task-list-item.md-task-list-item {
        padding-left: 0px;
    }

    .md-task-list-item>input {
        position: absolute;
        top: 0px;
        left: 0px;
        margin-left: -1.2em;
        margin-top: calc(1em - 10px);
        border: none;
    }

    .math {
        font-size: 1rem;
    }

    .md-toc {
        min-height: 3.58rem;
        position: relative;
        font-size: 0.9rem;
        border-radius: 10px;
    }

    .md-toc-content {
        position: relative;
        margin-left: 0px;
    }

    .md-toc-content::after,
    .md-toc::after {
        display: none;
    }

    .md-toc-item {
        display: block;
        color: rgb(65, 131, 196);
    }

    .md-toc-item a {
        text-decoration: none;
    }

    .md-toc-inner:hover {
        text-decoration: underline;
    }

    .md-toc-inner {
        display: inline-block;
        cursor: pointer;
    }

    .md-toc-h1 .md-toc-inner {
        margin-left: 0px;
        font-weight: 700;
    }

    .md-toc-h2 .md-toc-inner {
        margin-left: 2em;
    }

    .md-toc-h3 .md-toc-inner {
        margin-left: 4em;
    }

    .md-toc-h4 .md-toc-inner {
        margin-left: 6em;
    }

    .md-toc-h5 .md-toc-inner {
        margin-left: 8em;
    }

    .md-toc-h6 .md-toc-inner {
        margin-left: 10em;
    }

    @media screen and (max-width: 48em) {
        .md-toc-h3 .md-toc-inner {
            margin-left: 3.5em;
        }

        .md-toc-h4 .md-toc-inner {
            margin-left: 5em;
        }

        .md-toc-h5 .md-toc-inner {
            margin-left: 6.5em;
        }

        .md-toc-h6 .md-toc-inner {
            margin-left: 8em;
        }
    }

    a.md-toc-inner {
        font-size: inherit;
        font-style: inherit;
        font-weight: inherit;
        line-height: inherit;
    }

    .footnote-line a:not(.reversefootnote) {
        color: inherit;
    }

    .md-attr {
        display: none;
    }

    .md-fn-count::after {
        content: ".";
    }

    code,
    pre,
    samp,
    tt {
        font-family: var(--monospace);
    }

    kbd {
        margin: 0px 0.1em;
        padding: 0.1em 0.6em;
        font-size: 0.8em;
        color: rgb(36, 39, 41);
        background: rgb(255, 255, 255);
        border: 1px solid rgb(173, 179, 185);
        border-radius: 3px;
        box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset;
        white-space: nowrap;
        vertical-align: middle;
    }

    .md-comment {
        color: rgb(162, 127, 3);
        opacity: 0.8;
        font-family: var(--monospace);
    }

    code {
        text-align: left;
        vertical-align: initial;
    }

    a.md-print-anchor {
        white-space: pre !important;
        border-width: initial !important;
        border-style: none !important;
        border-color: initial !important;
        display: inline-block !important;
        position: absolute !important;
        width: 1px !important;
        right: 0px !important;
        outline: 0px !important;
        background: 0px 0px !important;
        text-decoration: initial !important;
        text-shadow: initial !important;
    }

    .md-inline-math .MathJax_SVG .noError {
        display: none !important;
    }

    .html-for-mac .inline-math-svg .MathJax_SVG {
        vertical-align: 0.2px;
    }

    .md-math-block .MathJax_SVG_Display {
        text-align: center;
        margin: 0px;
        position: relative;
        text-indent: 0px;
        max-width: none;
        max-height: none;
        min-height: 0px;
        min-width: 100%;
        width: auto;
        overflow-y: hidden;
        display: block !important;
    }

    .MathJax_SVG_Display,
    .md-inline-math .MathJax_SVG_Display {
        width: auto;
        margin: inherit;
        display: inline-block !important;
    }

    .MathJax_SVG .MJX-monospace {
        font-family: var(--monospace);
    }

    .MathJax_SVG .MJX-sans-serif {
        font-family: sans-serif;
    }

    .MathJax_SVG {
        display: inline;
        font-style: normal;
        font-weight: 400;
        line-height: normal;
        zoom: 90%;
        text-indent: 0px;
        text-align: left;
        text-transform: none;
        letter-spacing: normal;
        word-spacing: normal;
        overflow-wrap: normal;
        white-space: nowrap;
        float: none;
        direction: ltr;
        max-width: none;
        max-height: none;
        min-width: 0px;
        min-height: 0px;
        border: 0px;
        padding: 0px;
        margin: 0px;
    }

    .MathJax_SVG * {
        transition: none 0s ease 0s;
    }

    .MathJax_SVG_Display svg {
        vertical-align: middle !important;
        margin-bottom: 0px !important;
        margin-top: 0px !important;
    }

    .os-windows.monocolor-emoji .md-emoji {
        font-family: "Segoe UI Symbol", sans-serif;
    }

    .md-diagram-panel>svg {
        max-width: 100%;
    }

    [lang="mermaid"] svg,
    [lang="flow"] svg {
        max-width: 100%;
        height: auto;
    }

    [lang="mermaid"] .node text {
        font-size: 1rem;
    }

    table tr th {
        border-bottom: 0px;
    }

    video {
        max-width: 100%;
        display: block;
        margin: 0px auto;
    }

    iframe {
        max-width: 100%;
        width: 100%;
        border: none;
    }

    .highlight td,
    .highlight tr {
        border: 0px;
    }

    svg[id^="mermaidChart"] {
        line-height: 1em;
    }

    mark {
        background: rgb(255, 255, 0);
        color: rgb(0, 0, 0);
    }

    .md-html-inline .md-plain,
    .md-html-inline strong,
    mark .md-inline-math,
    mark strong {
        color: inherit;
    }

    mark .md-meta {
        color: rgb(0, 0, 0);
        opacity: 0.3 !important;
    }


    .CodeMirror {
        height: auto;
    }

    .CodeMirror.cm-s-inner {
        background: inherit;
    }

    .CodeMirror-scroll {
        overflow: auto hidden;
        z-index: 3;
    }

    .CodeMirror-gutter-filler,
    .CodeMirror-scrollbar-filler {
        background-color: rgb(255, 255, 255);
    }

    .CodeMirror-gutters {
        border-right: 1px solid rgb(221, 221, 221);
        background: inherit;
        white-space: nowrap;
    }

    .CodeMirror-linenumber {
        padding: 0px 3px 0px 5px;
        text-align: right;
        color: rgb(153, 153, 153);
    }

    .cm-s-inner .cm-keyword {
        color: rgb(119, 0, 136);
    }

    .cm-s-inner .cm-atom,
    .cm-s-inner.cm-atom {
        color: rgb(34, 17, 153);
    }

    .cm-s-inner .cm-number {
        color: rgb(17, 102, 68);
    }

    .cm-s-inner .cm-def {
        color: rgb(0, 0, 255);
    }

    .cm-s-inner .cm-variable {
        color: rgb(0, 0, 0);
    }

    .cm-s-inner .cm-variable-2 {
        color: rgb(0, 85, 170);
    }

    .cm-s-inner .cm-variable-3 {
        color: rgb(0, 136, 85);
    }

    .cm-s-inner .cm-string {
        color: rgb(170, 17, 17);
    }

    .cm-s-inner .cm-property {
        color: rgb(0, 0, 0);
    }

    .cm-s-inner .cm-operator {
        color: rgb(152, 26, 26);
    }

    .cm-s-inner .cm-comment,
    .cm-s-inner.cm-comment {
        color: rgb(170, 85, 0);
    }

    .cm-s-inner .cm-string-2 {
        color: rgb(255, 85, 0);
    }

    .cm-s-inner .cm-meta {
        color: rgb(85, 85, 85);
    }

    .cm-s-inner .cm-qualifier {
        color: rgb(85, 85, 85);
    }

    .cm-s-inner .cm-builtin {
        color: rgb(51, 0, 170);
    }

    .cm-s-inner .cm-bracket {
        color: rgb(153, 153, 119);
    }

    .cm-s-inner .cm-tag {
        color: rgb(17, 119, 0);
    }

    .cm-s-inner .cm-attribute {
        color: rgb(0, 0, 204);
    }

    .cm-s-inner .cm-header,
    .cm-s-inner.cm-header {
        color: rgb(0, 0, 255);
    }

    .cm-s-inner .cm-quote,
    .cm-s-inner.cm-quote {
        color: rgb(0, 153, 0);
    }

    .cm-s-inner .cm-hr,
    .cm-s-inner.cm-hr {
        color: rgb(153, 153, 153);
    }

    .cm-s-inner .cm-link,
    .cm-s-inner.cm-link {
        color: rgb(0, 0, 204);
    }

    .cm-negative {
        color: rgb(221, 68, 68);
    }

    .cm-positive {
        color: rgb(34, 153, 34);
    }

    .cm-header,
    .cm-strong {
        font-weight: 700;
    }

    .cm-del {
        text-decoration: line-through;
    }

    .cm-em {
        font-style: italic;
    }

    .cm-link {
        text-decoration: underline;
    }

    .cm-error {
        color: red;
    }

    .cm-invalidchar {
        color: red;
    }

    .cm-constant {
        color: rgb(38, 139, 210);
    }

    .cm-defined {
        color: rgb(181, 137, 0);
    }

    div.CodeMirror span.CodeMirror-matchingbracket {
        color: rgb(0, 255, 0);
    }

    div.CodeMirror span.CodeMirror-nonmatchingbracket {
        color: rgb(255, 34, 34);
    }

    .cm-s-inner .CodeMirror-activeline-background {
        background: inherit;
    }

    .CodeMirror {
        position: relative;
        overflow: hidden;
    }

    .CodeMirror-scroll {
        height: 100%;
        outline: 0px;
        position: relative;
        box-sizing: content-box;
        background: inherit;
    }

    .CodeMirror-sizer {
        position: relative;
    }

    .CodeMirror-gutter-filler,
    .CodeMirror-hscrollbar,
    .CodeMirror-scrollbar-filler,
    .CodeMirror-vscrollbar {
        position: absolute;
        z-index: 6;
        display: none;
    }

    .CodeMirror-vscrollbar {
        right: 0px;
        top: 0px;
        overflow: hidden;
    }

    .CodeMirror-hscrollbar {
        bottom: 0px;
        left: 0px;
        overflow: hidden;
    }

    .CodeMirror-scrollbar-filler {
        right: 0px;
        bottom: 0px;
    }

    .CodeMirror-gutter-filler {
        left: 0px;
        bottom: 0px;
    }

    .CodeMirror-gutters {
        position: absolute;
        left: 0px;
        top: 0px;
        padding-bottom: 30px;
        z-index: 3;
    }

    .CodeMirror-gutter {
        white-space: normal;
        height: 100%;
        box-sizing: content-box;
        padding-bottom: 30px;
        margin-bottom: -32px;
        display: inline-block;
    }

    .CodeMirror-gutter-wrapper {
        position: absolute;
        z-index: 4;
        background: 0px 0px !important;
        border: none !important;
    }

    .CodeMirror-gutter-background {
        position: absolute;
        top: 0px;
        bottom: 0px;
        z-index: 4;
    }

    .CodeMirror-gutter-elt {
        position: absolute;
        cursor: default;
        z-index: 4;
    }

    .CodeMirror-lines {
        cursor: text;
    }

    .CodeMirror pre {
        border-radius: 0px;
        border-width: 0px;
        background: 0px 0px;
        font-family: inherit;
        font-size: inherit;
        margin: 0px;
        white-space: pre;
        overflow-wrap: normal;
        color: inherit;
        z-index: 2;
        position: relative;
        overflow: visible;
    }

    .CodeMirror-wrap pre {
        overflow-wrap: break-word;
        white-space: pre-wrap;
        word-break: normal;
    }

    .CodeMirror-code pre {
        border-right: 30px solid transparent;
        width: fit-content;
    }

    .CodeMirror-wrap .CodeMirror-code pre {
        border-right: none;
        width: auto;
    }

    .CodeMirror-linebackground {
        position: absolute;
        left: 0px;
        right: 0px;
        top: 0px;
        bottom: 0px;
        z-index: 0;
    }

    .CodeMirror-linewidget {
        position: relative;
        z-index: 2;
        overflow: auto;
    }

    .CodeMirror-wrap .CodeMirror-scroll {
        overflow-x: hidden;
    }

    .CodeMirror-measure {
        position: absolute;
        width: 100%;
        height: 0px;
        overflow: hidden;
        visibility: hidden;
    }

    .CodeMirror-measure pre {
        position: static;
    }

    .CodeMirror div.CodeMirror-cursor {
        position: absolute;
        visibility: hidden;
        border-right: none;
        width: 0px;
    }

    .CodeMirror div.CodeMirror-cursor {
        visibility: hidden;
    }

    .CodeMirror-focused div.CodeMirror-cursor {
        visibility: inherit;
    }

    .cm-searching {
        background: rgba(255, 255, 0, 0.4);
    }

    @media print {
        .CodeMirror div.CodeMirror-cursor {
            visibility: hidden;
        }
    }


    :root {
        --side-bar-bg-color: #fafafa;
        --control-text-color: #777;
    }

    @include-when-export url(https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext);

    html {
        font-size: 16px;
    }

    body {
        font-family: "Open Sans", "Clear Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
        color: rgb(51, 51, 51);
        line-height: 1.6;
    }

    #write {
        max-width: 860px;
        margin: 0 auto;
        padding: 30px;
        padding-bottom: 100px;
    }

    #write>ul:first-child,
    #write>ol:first-child {
        margin-top: 30px;
    }

    a {
        color: #4183C4;
    }

    h1,
    h2,
    h3,
    h4,
    h5,
    h6 {
        position: relative;
        margin-top: 1rem;
        margin-bottom: 1rem;
        font-weight: bold;
        line-height: 1.4;
        cursor: text;
    }

    h1:hover a.anchor,
    h2:hover a.anchor,
    h3:hover a.anchor,
    h4:hover a.anchor,
    h5:hover a.anchor,
    h6:hover a.anchor {
        text-decoration: none;
    }

    h1 tt,
    h1 code {
        font-size: inherit;
    }

    h2 tt,
    h2 code {
        font-size: inherit;
    }

    h3 tt,
    h3 code {
        font-size: inherit;
    }

    h4 tt,
    h4 code {
        font-size: inherit;
    }

    h5 tt,
    h5 code {
        font-size: inherit;
    }

    h6 tt,
    h6 code {
        font-size: inherit;
    }

    h1 {
        padding-bottom: .3em;
        font-size: 2.25em;
        line-height: 1.2;
        border-bottom: 1px solid #eee;
    }

    h2 {
        padding-bottom: .3em;
        font-size: 1.75em;
        line-height: 1.225;
        border-bottom: 1px solid #eee;
    }

    h3 {
        font-size: 1.5em;
        line-height: 1.43;
    }

    h4 {
        font-size: 1.25em;
    }

    h5 {
        font-size: 1em;
    }

    h6 {
        font-size: 1em;
        color: #777;
    }

    p,
    blockquote,
    ul,
    ol,
    dl,
    table {
        margin: 0.8em 0;
    }

    li>ol,
    li>ul {
        margin: 0 0;
    }

    hr {
        height: 2px;
        padding: 0;
        margin: 16px 0;
        background-color: #e7e7e7;
        border: 0 none;
        overflow: hidden;
        box-sizing: content-box;
    }

    li p.first {
        display: inline-block;
    }

    ul,
    ol {
        padding-left: 30px;
    }

    ul:first-child,
    ol:first-child {
        margin-top: 0;
    }

    ul:last-child,
    ol:last-child {
        margin-bottom: 0;
    }

    blockquote {
        border-left: 4px solid #dfe2e5;
        padding: 0 15px;
        color: #777777;
    }

    blockquote blockquote {
        padding-right: 0;
    }

    table {
        padding: 0;
        word-break: initial;
    }

    table tr {
        border-top: 1px solid #dfe2e5;
        margin: 0;
        padding: 0;
    }

    table tr:nth-child(2n),
    thead {
        background-color: #f8f8f8;
    }

    table tr th {
        font-weight: bold;
        border: 1px solid #dfe2e5;
        border-bottom: 0;
        margin: 0;
        padding: 6px 13px;
    }

    table tr td {
        border: 1px solid #dfe2e5;
        margin: 0;
        padding: 6px 13px;
    }

    table tr th:first-child,
    table tr td:first-child {
        margin-top: 0;
    }

    table tr th:last-child,
    table tr td:last-child {
        margin-bottom: 0;
    }

    .CodeMirror-lines {
        padding-left: 4px;
    }

    .code-tooltip {
        box-shadow: 0 1px 1px 0 rgba(0, 28, 36, .3);
        border-top: 1px solid #eef2f2;
    }

    .md-fences,
    code,
    tt {
        border: 1px solid #e7eaed;
        background-color: #f8f8f8;
        border-radius: 3px;
        padding: 0;
        padding: 2px 4px 0px 4px;
        font-size: 0.9em;
    }

    code {
        background-color: #f3f4f4;
        padding: 0 2px 0 2px;
    }

    .md-fences {
        margin-bottom: 15px;
        margin-top: 15px;
        padding-top: 8px;
        padding-bottom: 6px;
    }


    .md-task-list-item>input {
        margin-left: -1.3em;
    }

    @media print {
        html {
            font-size: 13px;
        }

        table,
        pre {
            page-break-inside: avoid;
        }

        pre {
            word-wrap: break-word;
        }
    }

    .md-fences {
        background-color: #f8f8f8;
    }

    #write pre.md-meta-block {
        padding: 1rem;
        font-size: 85%;
        line-height: 1.45;
        background-color: #f7f7f7;
        border: 0;
        border-radius: 3px;
        color: #777777;
        margin-top: 0 !important;
    }

    .mathjax-block>.code-tooltip {
        bottom: .375rem;
    }

    .md-mathjax-midline {
        background: #fafafa;
    }

    #write>h3.md-focus:before {
        left: -1.5625rem;
        top: .375rem;
    }

    #write>h4.md-focus:before {
        left: -1.5625rem;
        top: .285714286rem;
    }

    #write>h5.md-focus:before {
        left: -1.5625rem;
        top: .285714286rem;
    }

    #write>h6.md-focus:before {
        left: -1.5625rem;
        top: .285714286rem;
    }

    .md-image>.md-meta {
        /*border: 1px solid #ddd;*/
        border-radius: 3px;
        padding: 2px 0px 0px 4px;
        font-size: 0.9em;
        color: inherit;
    }

    .md-tag {
        color: #a7a7a7;
        opacity: 1;
    }

    .md-toc {
        margin-top: 20px;
        padding-bottom: 20px;
    }

    .sidebar-tabs {
        border-bottom: none;
    }

    #typora-quick-open {
        border: 1px solid #ddd;
        background-color: #f8f8f8;
    }

    #typora-quick-open-item {
        background-color: #FAFAFA;
        border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
        border-style: solid;
        border-width: 1px;
    }

    /** focus mode */
    .on-focus-mode blockquote {
        border-left-color: rgba(85, 85, 85, 0.12);
    }

    header,
    .context-menu,
    .megamenu-content,
    footer {
        font-family: "Segoe UI", "Arial", sans-serif;
    }

    .file-node-content:hover .file-node-icon,
    .file-node-content:hover .file-node-open-state {
        visibility: visible;
    }

    .mac-seamless-mode #typora-sidebar {
        background-color: #fafafa;
        background-color: var(--side-bar-bg-color);
    }

    .md-lang {
        color: #b4654d;
    }

    .html-for-mac .context-menu {
        --item-hover-bg-color: #E6F0FE;
    }

    #md-notification .btn {
        border: 0;
    }

    .dropdown-menu .divider {
        border-color: #e5e5e5;
    }

    .ty-preferences .window-content {
        background-color: #fafafa;
    }

    .ty-preferences .nav-group-item.active {
        color: white;
        background: #999;
    }
</style>

<head>
    <meta charset='UTF-8'>
    <meta name='viewport' content='width=device-width initial-scale=1'>
    <title>转换入参</title>
</head>

<body class='typora-export os-windows'>
    <div id='write' class='is-node'>
        <h3>转换入参</h3>
        <label>输入</label>
        <button id="clear" style="padding-left: 8px;">clear</button>
        </br>
        <textarea id="input" style="width: 800px; height: 300px; margin-top: 8px;"></textarea></br></br>

        <!-- pageDim
            11ed01bdbdda4b9ba41cddcb9b5e29ae='11ed01bdca1bf53aa41c81e051ac8c1b' and 11ed01bdd4d63c25a41c4736ccb48437='11ed01c066b48b3fa41c73c186001158' and 11ed01bdf8354256a41c93c74319035f='11ed01c12fc8ad43a41c958891d5a067' and 11ed01bddf1204a0a41c212282ad364b='11ed07c9904f24368f10977e9bb315cc' and 11ed01bdff4c7241a41c65109b6e227a='11ed01c1385d074fa41ca1713335a986' and 11ed01bdea8c679ba41c3b5eb2a15bb5='11ed025629b93589acd9cb2dcf97ecde'
        -->
        <!-- pageMap
        {
            "11ed01bdbdda4b9ba41cddcb9b5e29ae": "11ed01bdca1bf53aa41c81e051ac8c1b",
            "11ed01bdd4d63c25a41c4736ccb48437": "11ed01c066b48b3fa41c73c186001158",
            "11ed01bdf8354256a41c93c74319035f": "11ed01c12fc8ad43a41c958891d5a067",
            "11ed01bddf1204a0a41c212282ad364b": "11ed07c9904f24368f10977e9bb315cc",
            "11ed01bdff4c7241a41c65109b6e227a": "11ed01c1385d074fa41ca1713335a986",
            "11ed01bdea8c679ba41c3b5eb2a15bb5": "11ed025629b93589acd9cb2dcf97ecde"
        }
        -->

        <label>输出</label>
        <button id="convert" style="padding-left: 8px;">convert</button>
        <button id="copy" style="padding-left: 8px;">copy to clipboard</button>
        </br>
        <textarea id="output" style="width: 800px; height: 300px; margin-top: 8px;"></textarea>
        <label>说明</label>
        <blockquote>
            <p>直接将 payload 粘贴到输入框，点击convert按钮完成转换</p>
            <p>注意：优先转参数中的pageDim</p>
        </blockquote>
    </div>
</body>

<script>
    var input = document.getElementById("input");
    var output = document.getElementById("output");

    // 转换入参
    document.getElementById("convert").onclick = () => {
        output.value = '';
        var inputJSON = JSON.parse(input.value);
        var outputJSON = {};
        outputJSON.formId = inputJSON.formId;
        if(inputJSON.memberId != undefined) {
            // getData
            outputJSON.path = inputJSON.memberId;
        }
        if(inputJSON.data != undefined) {
            // saveData
            outputJSON.data = [];
            inputJSON.data.forEach(el => {
                var da = {};
                da.path = el.memberIds;
                da.value = el.value;
                outputJSON.data.push(da);
            });
        }
        if (inputJSON.pageDim != undefined) {
            console.log(inputJSON.pageDim);
            outputJSON.pageDim = convertPageDim(inputJSON.pageDim);
        } else if (inputJSON.pageMap != undefined) {
            outputJSON.pageDim = convertPageMap(inputJSON.pageMap);
        } else {
            outputJSON = { "error": "数据格式错误" };
        }
        var rs = JSON.stringify(outputJSON, null, "  ");
        output.value = rs;
    }

    // 转换pageDim
    function convertPageDim(pageDim) {
        var pageDimPares = pageDim.split("and");
        var pageDimArgs = [];
        pageDimPares.forEach(pageDimPare => {
            var split = pageDimPare.split("=");
            var pageDimArg = {};
            pageDimArg.dimId = split[0].replaceAll(/\W/g, '');
            pageDimArg.dimMemberId = split[1].replaceAll(/\W/g, '');
            pageDimArgs.push(pageDimArg);
        });
        return pageDimArgs;
    }

    // 转换pageMap
    function convertPageMap(pageMap) {
        var pageMap = JSON.stringify(pageMap);
        var pageDimPares = pageMap.replaceAll(/{|}/g, '').split(",");
        var pageDimArgs = [];
        pageDimPares.forEach(pageDimPare => {
            var split = pageDimPare.split(":");
            var pageDimArg = {};
            pageDimArg.dimId = split[0].replaceAll(/\W/g, '');
            pageDimArg.dimMemberId = split[1].replaceAll(/\W/g, '');
            pageDimArgs.push(pageDimArg);
        });
        return pageDimArgs;
    }

    // 复制
    document.getElementById("copy").onclick = () => {
        output.select();
        if (document.execCommand('copy')) {
            document.execCommand('copy');
            console.log('复制成功');
        }
    }

    // 清空输入
    document.getElementById("clear").onclick = () => {
        input.value = '';
    }


</script>

</html>